package duplas;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Utils {

	private BufferedReader entrada;
	private StringBuilder saida;
	private final Set<String> nomesImpressos = new HashSet<String>();
	
	public StringBuilder getSaida() {
		return saida;
	}

	protected File pegaArquivo() {
		JFileChooser arquivoEscolhido = new JFileChooser();
		arquivoEscolhido.setFileFilter(new FileNameExtensionFilter(
				"Arquivo CSV", "csv"));
		arquivoEscolhido.showOpenDialog(null);		
		return arquivoEscolhido.getSelectedFile();
	}

	protected String pegaSemanaEscolhida() {
		return JOptionPane.showInputDialog("Número da semana:");
	}

	private void inicializaArquivos() throws IOException {
		entrada = new BufferedReader(new FileReader(pegaArquivo()));
	}

	public Map<String, String> leArquivo(String semanaEscolhida)
			throws IOException {
		inicializaArquivos();
		String linha = entrada.readLine();
		String[] nomes = linha.split(",");

		Map<String, String> duplas = new HashMap<String, String>();

		while ((linha = entrada.readLine()) != null && !linha.trim().isEmpty()) {

			StringTokenizer tokenizer = new StringTokenizer(linha, ",");

			String nomeAtual = tokenizer.nextToken();

			int cont = 0;

			while (tokenizer.hasMoreElements()) {
				String numero = tokenizer.nextToken();
				cont++;
				if (semanaEscolhida.equals(numero)
						&& !nomesImpressos.contains(nomeAtual)) {
					duplas.put(nomeAtual, nomes[cont]);
					duplas.put(nomes[cont], nomeAtual);
				}
			}
		}	
		finalizaArquivos();
		return duplas;
	}

	private void finalizaArquivos() throws IOException {
		entrada.close();
	}

	public static String formataPosicoes(List<ArrayList<String>> novasPosicoes) {
		String saida = "";
		int i = 0;
		for(ArrayList<String> dupla : novasPosicoes){
			saida += "" + ++i + ") #"  + dupla.get(0) + " #" + dupla.get(1) + "\n";  
		}		
		return saida;
	}
}
